#ifndef INVERTEDPENDULUM_H
#define INVERTEDPENDULUM_H


#include <Eigen/Dense>
#include <QTimer>

class InvertedPendulum {
public:
    InvertedPendulum(double mass_cart, double mass_pole, double length_pole, double gravity);
    double GetPosition() const;
    double GetAngle() const;
    Eigen::VectorXd LQRControl();
    void ControlLoop();
    void ApplyDisturbance(double dragStartPosx,double dragStartPosy,double forcex,double forcey); // 新增的方法，用于施加扰动

private:
    double m_cart_;   // 底座质量
    double m_pole_;   // 倒立摆质量
    double l_pole_;   // 倒立摆长度
    double g_;        // 重力加速度
    double x_;        // 底座位置
    double x_dot_;    // 底座速度
    double theta_;    // 倒立摆角度
    double theta_dot_; // 倒立摆角速度
    Eigen::MatrixXd A;
    Eigen::MatrixXd B;
};

#endif // INVERTEDPENDULUM_H
